iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0

CSS 基礎知識結構 現在雖然有AI但還是要有基礎知識才能夠控制AI所產生的code

  1. 核心語法與概念

CSS 規則結構:CSS由選擇器和聲明塊組成,格式為:
cssselector {
property: value;
}
例如:p { color: blue; } 將段落文字設為藍色。
層疊(Cascade):CSS 樣式根據來源(瀏覽器預設、作者樣式、使用者樣式)和優先級應用:

優先級(Specificity):計算方式為 inline > ID > class/attribute > element。例如,#id 優先於 .class,.class 優先於 p。
!important:最高優先級,但應謹慎使用。
繼承(Inheritance):某些屬性(如 color、font-family)會從父元素繼承到子元素。

應用方式:

內聯(Inline):(不推薦,難維護)。
內部(Internal):在 標籤內(用於單頁)。
外部(External):透過 引入 .css 檔案(最佳實踐)。

  1. 選擇器(Selectors)
    選擇器決定哪些HTML元素應用樣式,是CSS的核心。基礎選擇器包括:

基本選擇器:

元素選擇器:p(選取所有 元素)。
類別選擇器:.class(選取具有特定 class 的元素)。
ID 選擇器:#id(選取唯一 ID 的元素)。
通用選擇器:*(選取所有元素,謹慎使用)。

組合選擇器:

後代選擇器:div p(選取 內的所有 )。
子選擇器:div > p(僅選取 的直接子 )。
相鄰兄弟:h1 + p(選取緊跟 的 )。
一般兄弟:h1 ~ p(選取 之後的所有同級 )。

屬性選擇器:[type="text"](選取 type 為 text 的元素)。
偽類(Pseudo-classes):用於特定狀態,如 :hover(滑鼠懸停)、:focus(獲得焦點)、:first-child。
偽元素(Pseudo-elements):用於元素特定部分,如 ::before、::after(插入內容)、::first-line。

  1. 盒模型(Box Model)
    CSS將每個元素視為一個矩形盒子,包含以下部分:

Content:內容區域(由 width 和 height 定義)。
Padding:內容與邊框間的內間距(padding-top 等)。
Border:包圍 padding 的邊框(border-width、border-style、border-color)。
Margin:盒子外的間距(margin-top 等)。
關鍵屬性:

box-sizing:

content-box(預設,width/height 只算內容)。
border-box(推薦,width/height 包含 padding 和 border)。

速記屬性:margin: 10px 20px;(上下 10px,左右 20px)。

應用:理解盒模型對於佈局計算至關重要,避免溢出或意外間距。

  1. 佈局基礎
    CSS 佈局控制元素在頁面中的排列方式,基礎技術包括:

顯示屬性(Display):

block:佔滿整行(如 、)。
inline:僅佔內容寬度(如 、)。
inline-block:行內顯示但可設寬高。
none:隱藏元素(不佔空間)。

定位(Position):

static:預設,依文件流排列。
relative:相對於原始位置偏移(top、left 等)。
absolute:相對於最近的定位祖先(非 static)定位。
fixed:相對於視窗固定(如導航欄)。
sticky:滾動時在 static 和 fixed 間切換。

浮動(Float):

float: left/right;:元素靠左/右,常用於圖文環繞(但 Flexbox/Grid 更現代)。
clear: both/left/right;:清除浮動影響。

現代佈局:

Flexbox(一維佈局):

display: flex;
關鍵屬性:flex-direction(row/column)、justify-content(主軸對齊)、align-items(交叉軸對齊)、flex-wrap。
用於靈活的行或列排列。

Grid(二維佈局):

display: grid;
關鍵屬性:grid-template-columns、grid-template-rows、gap。
用於複雜網格佈局。

  1. 樣式屬性
    CSS 樣式控制元素的外觀,以下是基礎屬性:

文字與字型:

font-family: "Arial", sans-serif;(字型堆疊)。
font-size: 16px;(支援 px、rem、em、vw 等單位)。
font-weight: 400;(100-900 或 bold)。
line-height: 1.5;(行高,無單位或 px)。
text-align: center;(左、右、居中、兩端對齊)。
color: #333;(顏色,支援 HEX、RGB、HSL)。

背景:

background-color: blue;(背景色)。
background-image: url('image.jpg');(背景圖)。
background-size: cover;(縮放圖片)。
background-position: center;(圖片位置)。

邊框與輪廓:

border: 1px solid black;(速記:寬度、樣式、顏色)。
border-radius: 5px;(圓角)。
outline: 2px solid red;(輪廓,不佔空間)。

尺寸與間距:

width、height(固定或百分比)。
padding、margin(控制內外間距)。

單位:

絕對單位:px(像素)。
相對單位:rem(根字型大小)、em(父元素字型大小)、vw/vh(視窗寬高百分比)、%(父元素比例)。

  1. 響應式設計基礎
    確保網頁在不同設備(桌面、平板、手機)上顯示良好:

媒體查詢(Media Queries):
css@media (max-width: 768px) {
body { font-size: 14px; }
}

常用斷點:320px(手機)、768px(平板)、1024px(桌面)。

Viewport 設置:

在 HTML 中添加:
html

相對單位:使用 rem、em、vw、vh 確保縮放靈活性。
圖片響應:img { max-width: 100%; height: auto; } 防止圖片溢出。

  1. 基礎動畫與交互
    CSS 提供簡單的動畫效果,增強用戶體驗:

轉換(Transition):
cssbutton {
transition: background-color 0.3s ease;
}
button:hover {
background-color: blue;
}

屬性:transition-property、transition-duration、transition-timing-function。

動畫(Animation):
css@keyframes slide {
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
div {
animation: slide 2s infinite;
}

變換(Transform):

transform: rotate(45deg);(旋轉)、scale(1.2)(縮放)、translate(10px, 20px)(平移)。

  1. 最佳實踐與注意事項

命名規範:使用 BEM(Block-Element-Modifier)命名,如 .button--primary,提高可讀性和可維護性。
簡化選擇器:避免過深巢狀選擇器(如 div ul li a),降低優先級衝突和性能影響。
跨瀏覽器相容:

使用 -webkit-、-moz- 前綴(或工具如 Autoprefixer)處理瀏覽器差異。
測試主流瀏覽器(Chrome、Firefox、Safari、Edge)。

性能優化:

減少 reflow/repaint(如避免頻繁更改佈局屬性)。
合併樣式,壓縮 CSS 檔案。

可訪問性(Accessibility):

確保顏色對比符合 WCAG 標準(例如,文字與背景對比至少 4.5:1)。
提供 :focus 樣式支持鍵盤導航。
避免純 CSS 隱藏內容影響螢幕閱讀器(如 display: none;)。

模組化:將 CSS 分成模組(如 header.css、footer.css),或使用預處理器(如 Sass)管理變數和巢狀。

學習與應用建議

實作練習:

創建簡單頁面(如響應式卡片佈局)練習 Flexbox 和 Grid。
模擬常見 UI 組件(如導航欄、表單),結合偽類和動畫。

工具使用:

使用瀏覽器 DevTools 檢查元素樣式和佈局。
試用 CSS 框架(如 Tailwind CSS、Bootstrap)理解其背後原理。

常見問題:

佈局崩潰:檢查 box-sizing、浮動清除或溢出設置(overflow: auto/hidden)。
樣式未生效:檢查優先級、選擇器拼寫或檔案載入順序。

進階準備:

學習 CSS 變數(--var: value;)和函數(calc()、clamp())。
探索 CSS-in-JS(如 Styled Components)或預處理器(如 Sass、Less)。

Flexbox(靈活盒模型)
Flexbox 是一維佈局系統,適合在單一行或列中排列元素,特別適用於導航欄、卡片列表、居中內容等場景。它提供靈活的對齊和間距控制,解決了傳統浮動佈局的許多痛點。
核心概念

Flex 容器與項目:

設置 display: flex; 或 display: inline-flex; 將元素轉為 Flex 容器,其直接子元素成為 Flex 項目(Flex Items)。
容器控制整體佈局,項目則根據容器屬性排列。

主軸與交叉軸:

主軸(Main Axis):由 flex-direction 決定(row 或 column)。
交叉軸(Cross Axis):垂直於主軸,用於對齊。

關鍵屬性(容器)

display: flex;

啟用 Flexbox 佈局。
inline-flex 使容器行內顯示。

flex-direction

定義主軸方向:

row(預設,左到右)。
row-reverse(右到左)。
column(上到下)。
column-reverse(下到上)。

flex-wrap

控制項目是否換行:

nowrap(預設,單行擠壓)。
wrap(多行,溢出換行)。
wrap-reverse(多行,反向排列)。

justify-content

主軸對齊方式:

flex-start(靠主軸起點)。
flex-end(靠主軸終點)。
center(居中)。
space-between(兩端對齊,間距均分)。
space-around(項目周圍均等間距)。
space-evenly(間距完全均等)。

align-items

交叉軸對齊(單行):

flex-start(靠交叉軸起點)。
flex-end(靠交叉軸終點)。
center(居中)。
baseline(按文字基線對齊)。
stretch(預設,填充交叉軸)。

align-content

交叉軸對齊(多行,需 flex-wrap: wrap):

類似 justify-content,但作用於多行間的間距。

gap

設置項目間的間距,如 gap: 10px;(行與列間距)或 gap: 10px 20px;(行間距 10px,列間距 20px)。

關鍵屬性(Flex 項目)

flex

速記屬性,結合 flex-grow、flex-shrink、flex-basis:

flex: 1; 表示均分空間。
flex: 0 0 100px; 表示固定寬度 100px。

flex-grow

控制項目如何擴展以填充剩餘空間(預設 0)。

flex-shrink

控制項目如何收縮(預設 1)。

flex-basis

定義項目的基礎尺寸(預設 auto)。

align-self

單獨項目在交叉軸上的對齊,覆蓋 align-items(如 align-self: center;)。

order

改變項目的排列順序(預設 0),如 order: 1; 將項目移到後面。

實用範例
居中一個 div:
css.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
導航欄(均分項目):
css.nav {
display: flex;
justify-content: space-between;
gap: 20px;
}
響應式卡片列表:
css.cards {
display: flex;
flex-wrap: wrap;
gap: 15px;
}
.card {
flex: 1 1 200px; /* 至少 200px,均分剩餘空間 */
}
用例與優勢

適合一維佈局(如導航欄、表單、卡片列)。
自動處理項目的靈活縮放和對齊。
解決浮動佈局的問題(如清除浮動)。

CSS Grid(網格佈局)
CSS Grid 是二維佈局系統,適合複雜的網頁結構(如儀表板、頁面框架)。它允許你精確控制行和列,形成網格結構。
核心概念

Grid 容器與項目:

設置 display: grid; 或 display: inline-grid; 將元素轉為 Grid 容器,其直接子元素成為 Grid 項目。

網格線與單元格:

網格由行(row)和列(column)組成,交點形成單元格。
網格線(Grid Lines)用於定位項目。

顯式與隱式網格:

顯式:由 grid-template-columns/rows 定義。
隱式:由 grid-auto-columns/rows 自動生成。

關鍵屬性(容器)

display: grid;

啟用 Grid 佈局。

grid-template-columns / grid-template-rows

定義網格的列和行尺寸:

如 grid-template-columns: 100px 200px 1fr;(固定 100px、200px,剩餘空間均分)。
使用 repeat(3, 1fr) 表示 3 列等寬。
支持單位:px、%、fr(剩餘空間比例)、auto。

gap

設置網格間距,如 gap: 10px; 或 gap: 10px 20px;(行/列)。

grid-auto-columns / grid-auto-rows

定義隱式網格的尺寸,如 grid-auto-rows: 100px;。

justify-items / align-items

控制單元格內項目的對齊:

start、end、center、stretch(預設)。

justify-content / align-content

控制整個網格在容器中的對齊(類似 Flexbox)。

grid-template-areas

使用命名區域定義佈局:
css.container {
display: grid;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
}
.header { grid-area: header; }

關鍵屬性(Grid 項目)

grid-column / grid-row

指定項目跨網格線:

如 grid-column: 1 / 3;(從第 1 線到第 3 線,跨 2 列)。
速記:grid-column: 1 / span 2;(跨 2 列)。

grid-area

將項目分配到命名區域或指定線。

justify-self / align-self

單獨項目在單元格內的對齊,覆蓋 justify-items/align-items。

實用範例
簡單 3x2 網格:
css.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: auto auto;
gap: 10px;
}
頁面佈局:
css.container {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-areas:
"sidebar header"
"sidebar main"
"sidebar footer";
min-height: 100vh;
}
.sidebar { grid-area: sidebar; }
.header { grid-area: header; }
.main { grid-area: main; }
.footer { grid-area: footer; }
響應式網格:
css.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 15px;
}
用例與優勢

適合二維佈局(如網站主結構、儀表板)。
精確控制行和列,支援複雜重疊。
響應式設計更強大(如 auto-fit 和 minmax)。

Flexbox vs. Grid:何時使用?

Flexbox:

適用於一維佈局(如導航欄、卡片列表)。
擅長動態內容(項目大小不固定)。
簡單、靈活,適合快速對齊。

Grid:

適用於二維佈局(如頁面框架、複雜網格)。
適合固定結構或需要精確定位的場景。
更強大的控制,但語法較複雜。

結合使用:

外層用 Grid 定義頁面結構,內層用 Flexbox 排版小組件。
例如:Grid 佈局主頁,Flexbox 排版導航欄或卡片內容。

實踐建議與注意事項

練習範例:

用 Flexbox 實現導航欄(水平排列,響應式折疊)。
用 Grid 創建響應式圖片庫(自動調整列數)。
結合兩者:Grid 做頁面框架,Flexbox 處理內容區。

常見問題:

Flexbox 間距不均:檢查 justify-content 和 gap。
Grid 項目溢出:確保 grid-template-columns 使用 fr 或 minmax。
老舊瀏覽器:Flexbox 和 Grid 在現代瀏覽器(Chrome、Firefox、Safari)支援良好,但 IE11 需回退方案(如浮動或 display: table)。

工具輔助:

使用 DevTools 的 Flexbox/Grid 檢查器視覺化佈局。
參考線上工具如 CSS Grid Generator 或 Flexbox Froggy 練習。

最佳實踐:

使用 gap 替代 margin 控制間距。
結合媒體查詢實現響應式:
css@media (max-width: 768px) {
.container {
grid-template-columns: 1fr; /* 手機單列 */
}
}

避免過於複雜的選擇器,保持代碼簡潔。

範例專案建議

Flexbox:創建一個響應式導航欄,包含 logo、菜單和按鈕,桌面水平排列,手機垂直堆疊。
Grid:設計一個博客頁面,包含側邊欄、主要內容和頁腳,適配不同螢幕尺寸。
結合:用 Grid 做頁面框架,Flexbox 排版文章卡片。

如果需要具體的程式碼範例(如某個佈局的實現)或更深入的某屬性講解(如 minmax 或 grid-template-areas),請告訴我!


上一篇
Day1_整理一下整理筆記_順便複習一下自己的基礎概念知識HTML/CSS
下一篇
Day3_grid
系列文
韌體測試工程師轉職中;4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言